{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# **smoothnlp.algorithm.phrase.phrase_extraction**"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    ">参数说明：\n",
    "```\n",
    "corpus:     必需，fileIO、database connection或list\n",
    "            example:corpus = open(file_name, 'r', encoding='utf-8')\n",
    "                    corpus = conn.execute(query)\n",
    "                    corpus = list(***)\n",
    "top_k:      float or int,表示短语抽取的比例或个数\n",
    "chunk_size: int,用chunksize分块大小来读取文件\n",
    "min_n:      int,抽取ngram及以下\n",
    "max_n:      int,抽取ngram及以下\n",
    "min_freq:   int,抽取目标的最低词频\n",
    "```"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "from smoothnlp.algorithm.phrase import extract_phrase"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### 测试数据:\n",
    "\n",
    "| 数据集名称 | 数据量 | 总字数 | 数据领域 | 下载地址 |\n",
    "|:-:|:---:|:---:|:-:|:---:|\n",
    "|专栏资讯数据集|10,000条|28,129,311|金融|https://github.com/smoothnlp/FinancialDatasets |\n",
    "|金融新闻数据集|20,000条|25,295,513|金融|https://github.com/smoothnlp/FinancialDatasets |\n",
    "|36氪新闻数据集| 100000条 | 196,288,902 |金融|  https://github.com/smoothnlp/FinancialDatasets|\n",
    "|医疗行业数据集|1000条| 49,466 |医疗|http://www.sdspeople.fudan.edu.cn/zywei/DATA130006/final-project/index.html |\n",
    "\n",
    "\n",
    "\n",
    "##### 专栏资讯数据集"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['亚马逊', '阿里巴巴', '短视频', '选择', '腾讯', '搜索', '苏宁', '今日头条', '甚至', '战略', '包括', '苹果', '支付宝', '健康', '区块链', '非常', '爱奇艺', '李彦宏', '政府', '淘宝', '粉丝', '教育', '浏览器', '谷歌', '医疗', '芯片', '逐渐', '周鸿祎', '设备', '缺乏', '滴滴', '世界', '餐饮', '软件', '酒店', 'VR', '政策', '瑞幸咖啡', '阅读', '竞争', '补贴', '咨询', '搜狗', '必须', 'Uber', '似乎', '继续', '斗鱼', '覆盖', '蘑菇街', '魅族', '希望', '沃尔玛', '帮助', '环境', '挖掘', '星巴克', '纷纷', '虚拟', '抖音', '搜索引擎', '副总裁', '荣耀', '监管', '明星', '陌陌', 'QQ', '风险', '表示', '饿了么', '亏损', '版权', '获取', '满足', '培训', '问题', '尝试', '具备', '硬件', '贾跃亭', '突破', '追求', '特斯拉', '语音', '雷军', '彻底', '配送', '朋友圈', '屏幕', '研究', '习惯', '寻找', '怎么', '解决方案', '垃圾', '组织', '深度学习', '诺基亚', '历史', '普遍', '往往', '招聘', '独立', '净利润', '保险', '咖啡', '舆论', '支付', '概念', '鼓励', '导致', '贡献', '吸引', '口碑', '顺丰', '俄罗斯', '探索', '借助', '马云', '阿里云', '快递', '建立', '影响', '保障', '贷款', '冰箱', '精准', '培养', '王者荣耀', '几乎', '世界杯', '事件', '母婴', '优势', '再次', '趣头条', '依旧', '研究院', '申请', '效率', '任何', '升级', '海尔', '学习', '儿童', '转型', '门店', '逻辑', '积极', '依赖', '租赁', '什么', '翻译', '趋势', '按照', '摩托罗拉', '疯狂', '玻璃', '第二', '依靠', '降低', '终端', '连锁', '保护', '构建', '烧钱', '农村', '语音识别', '识别', '喜欢', '首次', '图片', '刺激', '丁磊', '知识', '虎牙', '秒拍', '众筹', '导航', '连续', '乔布斯', '钉钉', '解决', '支撑', '保证', '安卓', '慢慢', '邀请', '距离', '杭州', '策略', '移动支付', '显示', '回归', '凭借', '扩张', '授权', '共享', '校园', '率先']\n",
      "CPU times: user 1min 45s, sys: 3.2 s, total: 1min 48s\n",
      "Wall time: 1min 48s\n"
     ]
    }
   ],
   "source": [
    "%%time\n",
    "f=open('SmoothNLP专栏资讯数据集样本10k.txt','r')\n",
    "lines = f.readlines()\n",
    "top200=extract_phrase(lines,top_k=200)\n",
    "print(top200)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### 金融新闻数据集"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['教育', '世界', '阿里巴巴', '游戏', '儿童', '租赁', '申请', '医疗', '问题', '苹果', '环境', '亚马逊', '健康', '战略', 'ETF', '组织', '音乐', '扶贫', '影响', '研究', '垃圾', '净利润', '香港', '积极', '餐饮', '绿色', '诈骗', '系统', '疫苗', '包括', '阅读', '改革', '披露', '咨询', '按照', '污染', '涉嫌', '亏损', '传统', '腾讯', '快递', '调查', '世界杯', '评估', '竞争', '直接', '满足', '短视频', '表示', '鼓励', '婴幼儿', '货币政策', '根据', '补贴', '突破', '玻璃', '测试', '选择', '芯片', '娱乐', '反洗钱', '供应链', '采取', '滴滴', '幼儿园', 'MLF', '虚假', '直播', '培训', '伦敦', '标准', '酒店', '故宫', '养老', '宏观审慎', '降低', '完善', '补充', '处置', '常住人口', '石油', '配送', '调整', '维护', '历史', '兄弟', '覆盖', '需求', '审核', '招聘', '居住', '副总裁', '希望', '苏宁', '师傅', '终端', '杭州', '做好', '苏州', '协议', '示范', '诉讼', '他们', '抵押', '给予', '趋势', '肿瘤', '犯罪', '瑞幸咖啡', '连续', '必须', '脱贫攻坚', '传播', '检查', '董明珠', '粉丝', '注册', '涨幅', '贫困', '货币', '私募', '俄罗斯', '论坛', '迪士尼', '配套', '宣传', '页岩气', '五粮液', '艾瑞', '赔偿', '咖啡', '继续', '罕见病', '材料', '意味着', '跨境', '病毒', '逐渐', '损失', '包装', '钉钉', '淘宝', '虚拟', '干细胞', '乡村振兴', '首次', '预算', '帮助', '硅谷', '缴纳', '饿了么', '导致', '培育', '探索', '慈善', '策略', '情况', '武汉', '结算', '奖励', '聚焦', '烹饪', '模式', '搜索', '审批', '减少', '影视', '视频', '爸爸', '浙江', '腐败', '煤炭', 'vlog', '领域', '航空', '打造', '意见', '敬畏', '渠道', '引导', '马蜂窝', '谷歌', '薪酬', '艺术', '原油', '环境保护', '精准', '补偿', '宏观', '光伏', '钢铁', 'FF', '女士', '写字楼', '仍然', '改革开放', '如何', '贾跃亭', '呷哺呷哺', '种植', '停复牌', '烟草', '爱奇艺', '矛盾', '依然', '详细', '纷纷', '解决', '退休', '今日头条', '副主任', '预警', '博物馆', '阿里', '疾病', '修订', '首席', '检测', '住宅', '澳门', '办公室', '英寸', '驾驶', '释放', '普莱德', '丝绸之路', '排放', '仲裁', '医疗器械', '翻译', '红包', '漫画', '什么', '奔驰', '传媒', '怎么', '改造', '稀土', '污染防治', '逐步', '配置', '拍卖', '扣缴', '团队', '欧盟', '状况', '世纪', '纠纷', '快速', '查询', '塑料', '初步', '微博', '乘客', '朋友圈', '奋斗', '显著', '吸引', '铁路', '奶粉', '此次', '识别', '哔哩哔哩', '结构调整', '呷哺', '杂交水稻', '普遍', '休闲', '随着', 'log', '惩戒', '考核', '森林', '漫威', '挂牌', '核查', '巩固', '乡村', 'VR', '责任', '欧洲', '娃哈哈', '追溯', '凤凰', '抖音', '斯世界', '隐私', '贵州', '改善', '接近', '告诉', '违反', '十六条', '形势', '群众', '思维', '门槛', '冻结', '亚洲', '乐视', '签署', 'ss', 'FOF', '签订', 'QQ', '转让', '优先', '兑付', '微软', '独立', '承诺', '激励', 'ch', '英镑', '英雄', '评论', '屏幕', '游客', '活跃', '承担', '反映', '贡献', '足球', '青岛', '摩拜', '买入委托', '去杠杆', '储蓄', '恐怖', '获取', '指引', '阳光', '连锁', '幼儿', '停牌', '杠杆', '虚拟货币', '便利店', '清算', '革命', '老字号', '宁波', '食品饮料', '郑州', 'RO', 'Mac', '领导', '挖矿', '辅导', '春节', '终止', '范围', '住房租赁', '熊猫', '脱欧', 'king', '质押', '措施', '因素', '储备', '啤酒', '千亿', 'lus', '招股书', '猪肉', '荔枝', '问询函', '摄像头', '担任', '岗位', '概念', '结果', 'us', '气象', '欺诈', '禁止', '氟氯', '猫眼', '佛山', '供给侧', '红周刊', '精神', '那么', '回归', '火箭', '首批', 'MO', '显示', '反垄断', '装修', '荣耀', '盛大游戏', 'ly', '暂停', '回答', '十三条', '羊绒', '确认', '走势', '操纵', '魏银仓', '哺呷哺', 'las', '扣除', '教师', '抢票', '存储', '放宽', '蛋白', '注射', '防范', '背景', '临时停牌', '猪存栏', '养殖', '盗版', '玉米', '褚时健', '四川', '菲律宾', '隐患', '始终', '转型', '蔬菜', 'um', '旅客', '程序', '各类', 'Max', '枢纽', '轻度污染', '减值准备', '校园', '协议转让', '灵活', '欢乐', '督察', '摇号', '承包', 'ESG', 'Book', 'MHz', '迅速', '结售汇', '委托', '每股收益', '稳健', '整治', '哩哔哩', '十八', '辐射', 'ceG', '返乡', '感谢', '印尼', '处罚', '名义', '姐姐', '优惠', '把握', '准备', '谈判', '再次', '河南省', '湖南省', '石家庄', '停止', '尚未', '优势', '环境影响', '票退改签', '景德镇', '知道', '阶段', '燃煤', '残疾', '追求', '如果', '独角兽', '图书馆', 'Hold', '云南', 'HBO', '异常', '景气', '曝光', '央视', '维修', '圆桌', '知识', '依托', '运输', '继续教育', '斯坦', '星河湾', '道路', '接种', '波音', '买卖', 'Mess']\n"
     ]
    }
   ],
   "source": [
    "f=open('SmoothNLP金融新闻数据集样本20k.txt','r')\n",
    "top200=extract_phrase(corpus=f,500)  ## corpus支持直接输入一个 FileIO Object\n",
    "print(top200)  ## 返回结果已按照score排序"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### 36氪新闻数据集"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['阿里巴巴', '游戏', '教育', '亚马逊', '广告', '选择', '苹果', '健康', '腾讯', '支持', '希望', '包括', '巨头', '世界', '非常', '政府', '表示', '甚至', '副总裁', '便利店', '支付宝', '似乎', '餐饮', '社区', '传统', '谷歌', '搜索', '考虑', '渠道', '京东', '滴滴', '政策', '研究', '硅谷', '旅游', '帮助', '特斯拉', '逐渐', '咨询', '沃尔玛', '支付', '申请', '覆盖', '培训', '快速', '测试', '独角兽', '报告', '北京', '儿童', '研究院', '尝试', '独立', '咖啡', '连锁', '招聘', '酒店', '李彦宏', '粉丝', '杭州', '短视频', '必须', '芯片', '打造', '阅读', '怎么', '保险', '纷纷', '保持', '组织', '满足', '特朗普', '讨论', '香港', '任何', '战略', '趋势', '深度学习', '朋友圈', '识别', '浏览器', '苏宁', '探索', '吸引', '继续', '降低', '记录', '租赁', '持续', '竞争', '突破', '观察', '越来越', '准备', '证券', '影响', '深圳', '缺乏', '英特尔', '凤凰', '淘宝', '环境', '刚刚', '泡沫', '语音', '消费升级', '建立', '历史', '配送', '透露', '问题', '鼓励', '第二', '迅速', '往往', '邮箱', '欧洲', '检测', '首次', '健身', '各种', '预测', '追踪', '解决方案', '什么', '担任', '围绕', '校园', '保护', '贾跃亭', '挖掘', '习惯', '积极', '迪士尼', '亿人民币', '贷款', '估值', '几乎', '建筑', '接受', '演讲', '云计算', '再次', '消息', '调查', '意味着', '快递', '餐厅', '颠覆', '愿意', '监测', '掌握', '乔布斯', '登陆', '依然', '净利润', '仍然', '培养', '雅虎', '扫描', '销售额', '扩张', '传感器', '概念', '改善', '移动端', '解决', '移动支付', '负责', '母婴', '门店', '朋友', '千万级', '坚持', '究竟', '诺基亚', '减少', '规划', '首席', '肿瘤', '社交网络', '订阅', '构建', '顾客', '知名', '法律', '票房', '亚洲', '清楚', '虚拟', '寻找', '核心', '阶段', '亿美元', '知识', '详细', '豆瓣', '距离', '索尼', '癌症', '随着', '漫画', '思考', '二维码', '转型', '搭建', '显示', '东南亚', '农村', '屏幕', '陌陌', '停止', '精神', '情况', '彻底', '陆续', '精准', '教育领域', '传媒', '细节', '抓住', '喜欢', '优势', '魅族', '股权', '知道', '至少', '打算', '亏损', '效率', '逐步', '嘉宾', '纽约', '调整', '反馈', '星巴克', '障碍', '算法', '俄罗斯', '介绍', '决策', '试图', '接近', '眼镜', '共享', '休闲', '葡萄酒', '搜索引擎', '那么', '因素', '感觉', '股票', '糖尿病', '维修', '回归', '版权', '安装', '菜鸟', '评估', '状况', '诊断', '增速', '股东', '策略', '拒绝', '轻松', '亿元', '披露', '特别', '导致', '判断', '孵化器', '玻璃', '按照', '普遍', '此次', '杂志', '安卓', '拍摄', '门槛', '借助', '优质', '升级', '麦当劳', '裁员', 'QQ', '挑战', '风险', '超级', '马云', '导航', '伦敦', '马化腾', '解释', '区域', '旧金山', '洛杉矶', '英语', '辅助', '饿了么', '案例', '顺丰', '材料', '传播', '广州', '训练', '具备', '围棋', '积累', '明星', '存储', '刺激', '探讨', '慢慢', '语言', '二次元', '风口', '搭载', '语音识别', '简单', '增长率', '采访', '千万美元', '刘强东', '保证', '结构', '疾病', '思维', '各位', '聚焦', '博士', '爱奇艺', '允许', '凭借', '永远', '结束', '延伸', '旗舰店', '睡眠', '澳大利亚', '邀请', '范围', '华盛顿', '充满', '包含', '治疗', '审核', '财富', '依靠', '匹配', '第一次', '知乎', '软银', '珠宝', '图像识别', '英寸', '背景', '给予', '涂子沛', '波士顿', '制造', '区块链', '烘焙', '采取', '研究中心', '知情人士', '逻辑', '放弃', '犯罪', '扎克伯格', '隐私', '博客', '编辑', '周边', '欢迎', '筛选', '尺寸', '顶级', '变革', '足球', '图片', '移动医疗', '容易', '架构', '爆炸', '薪酬', '吐槽', '签署', '武汉', '足够', '雷军', '浪潮', '阿里云', '照片', '专门', '啤酒', '旗舰', '避免', '突然', '火箭', '迭代', '建议', '康复', '什么时候', '结果', '连续', '终端', '订单', '妈妈', '净亏损', '简历', '黑客', '评论', '搜狐', '报道', '世纪', '篇文章', '协议', '依旧', '运输', '熊猫', '西班牙', '描述', '失败', '取代', '挂牌', '遭遇', '私募股权', '仔细', '官方博客', '跟踪', '补贴', '垄断', '贡献', '节省', '程序', '猎豹', '请点击', '支撑', '马斯克', '琢磨', '研究报告', '框架', '离职', '论坛', '报名', '老师', '程序员', '王健林', '股份', '标准', '蓝牙', '卫星', '装修', '顶尖', '口碑', '临床', '共享经济', '验证', '翻译', '确认', '著名', '回答', '玩具', '办法', '周末', '麻烦', '摄像头', '贸易', '股权激励', '热门', '参考', '短租', '东西', '杠杆', '百货', '芝加哥', '告诉', '笔记', '渗透率', '环节', '认知', '巴士', '滑雪', '句话', '原因', '拯救', '规范', '店铺', '证明', '享受', '课堂', '教授', '航空', '太平洋', '革命', '签约', '路径', '货币', '效果']\n",
      "CPU times: user 48.6 s, sys: 1.43 s, total: 50.1 s\n",
      "Wall time: 1min 22s\n"
     ]
    }
   ],
   "source": [
    "%%time\n",
    "engine = create_engine(\"你的数据库信息\")\n",
    "conn = engine.connect()\n",
    "query = \"你的sql语句\"   ## 此处使用的是截止2018年8月最新的3万条36kr新闻数据\n",
    "cursor = conn.execute(query)\n",
    "top500=extract_phrase(cursor,500)\n",
    "print(top500)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[创业公司, 过程中, 用户提供, 社交网络, 移动端, 移动互联网, 互联网公司, 中国市场, 用户体验, 会成为, 会出现, 做事情, 会不会, 想做, 会更, 创业团队, 移动设备, 新浪微博, 产品经理, 提供服务, 用户使用, 穿戴设备, 云服务, 产品服务, 是否会, 可能会, 互联网金融, 用户会, 联合创始人, 已经成为, 智能手表, 生活方式, 初创企业, 一家公司, 会继续, 初创公司, 资本市场, 电商平台, 投资机构, 会发现, 智能硬件, 会用户, 用户数据, 用户需求, 公司会, 产品会, 科技公司, 市场中, 做事, 应用中, 帮助用户, 应该会, 会选择, 移动应用, 会做, 解决问题, 做产品, 非常重要, 产品中, 团队成员, 生活中, 公司做, 企业用户, 用户需要, 会更多, 会更加, 会越来越, 企业文化, 开发出, 肯定会, 传统行业, 数据进行, 社交媒体, 可能需要, 会自动, 花时间, 会推出, 已经超过, 用户进行, 生活服务, 大众点评, 会影响, 中国互联网, 行业里, 或许会, 平台会, 往往会, 希望能够, 研究人员, 视频内容, 企业服务, 目标用户, 移动支付, 企业提供, 乐视, 之后会, 更重要, 用户选择, 会进行, 智能电视, 视频网站, 会比较, 中国用户, 表示会, 垂直领域, 更适合, 需要做, 相关信息, 应用商店, 会提供, 会导致, 市场规模, 众包, 互联网企业, 会带来, 公司已经, 市场会, 更强, 完全不同, 公司发展, 几乎没有, 游戏中, 变得更, 用户直接, 团队会, 已经获得, 服务会, 客户提供, 会考虑, 会觉得, 互联网行业, 没有办法, 微信支付, 新公司, 公司里, 方式进行, 说做, 企业市场, 已经做, 改变世界, 互联网产品, 微信公众, 月前, 用户中, 产品已经, 世界里, 已经完成, 旅游产品, 用户信息, 平板电脑, 获取用户, 用户群体, 产品做, 移动医疗, 社交平台, 中加入, 行业中, 应用会, 需要用户, 服务中, 完全没有, 语音识别, 提供免费, 会增加, 提供更, 创造出, 手机应用, 很大程度, 产品没有, 广告收入, 会非常, 找不到, 提供更多, 一直没有, 用户行为, 短视频, 便会, 用户增长, 做更, 中看到, 平台进行, 智能设备, 可能成为, 行业发展, 正式发布, 产品团队, 互联网化, 公司产品, 电商网站, 健康管理, 允许用户, 会直接, 技术会, 应用开发, 信息进行, 平台提供, 信息会, 没办法, 服务产品, 系统会]\n"
     ]
    }
   ],
   "source": [
    "from pyhanlp import *\n",
    "import pandas as pd\n",
    "engine = create_engine(\"你的数据库信息\")\n",
    "conn = engine.connect()\n",
    "query = \"你的sql语句\"   ## 由于HanLP的jvm限制, 此处使用的是5000条36kr新闻数据\n",
    "corpus = pd.read_sql(query, conn)['content'].values\n",
    "corpus='\\n'.join(corpus)\n",
    "print(HanLP.extractPhrase(corpus, 200))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### 医疗行业数据集"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['布洛芬', '精神状态', '双歧杆菌', '阿奇霉素', '自己', '妈咪爱', '母乳', '治疗', '益生菌', '显示', '或者', '频繁', '特别', '蒙脱石散', '精神', '连续', '偶尔', '疫苗', '而且', '比较']\n",
      "CPU times: user 2.55 s, sys: 0 ns, total: 2.55 s\n",
      "Wall time: 2.55 s\n"
     ]
    }
   ],
   "source": [
    "%%time\n",
    "import pandas as pd\n",
    "corpus = list(pd.read_csv('annotated.csv',encoding='utf-8')['content'].values)\n",
    "top20=extract_phrase(corpus,top_k=20,min_freq=1)\n",
    "print(top20)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
